# coding: utf-8

arr = [1, 2, 3]

# 可以从前往后的索引，也可以反向索引。
puts arr[0], arr[-1]

# 如果超出正常的范围则返回nil。
puts arr[-4], arr[3]

# 数组会自动扩展，中间的空位会被填充为nil。
arr[4] = 5
puts arr

begin
	arr[-100] = 5
rescue Exception => e
	puts "反向赋值的话，如果索引超出了正常范围，会抛出异常。"
end

# 当数组的元素全部是字符串字面量且没有空格的情况下，可以使用特殊的语法。
puts %w{this is a test}
puts %W{this is a #{"test"}}

# 构造Array
puts Array.new
puts Array.new 3
puts Array.new 3, 0
puts Array.new(3) { |i| i * i }

# 可以使用更高级的语法索引子数组。
arr = (?a..?e).to_a
puts arr
puts arr[0, 1]
puts arr[0..-1]

# 使用高级的语法修改数组。
arr = (1..3).to_a
puts arr
arr[-1, 1] = "c"
puts arr
arr[-1, 1] = [3, 4]
puts arr
arr[-2, 2] = nil # 将后面两个元素替换为一个为值为nil的元素。
puts arr
arr[-1, 1] = [] # 这样才会删除元素。
puts arr

# 数组运算。
puts [1, 2] + [3, 4]
puts [1, 2, 3] - [2, 3]
puts [1, 2, 3] << 4
puts [1, 2] * 2
puts [1, 2] | [2, 3]
puts [1, 2] & [2, 3]